home *** CD-ROM | disk | FTP | other *** search
-
- #include <stdio.h>
- #include <string.h>
- #include <glib.h>
-
- /* #include "..\lib.h" */
-
-
- int tiffl(int x, int y, char *fnam)
- {
- int ern;
- FILE *fp;
- char ch2[2];
- long ifdoff, voff;
- unsigned int ifdn, dx, dy, pi;
- unsigned int i, j;
- struct ifdt{
- int tag;
- int type;
- long len;
- long data;
- } ifd;
- unsigned int vramd;
- unsigned n, offset;
- int ret;
-
- if ((fp = fopen(fnam, "r")) == NULL) { ern = -1; goto end; } /* file error */
- if (getw(fp) != 0x4949) { ern = -2; goto end; } /* ID error */
- getw(fp); /* dummy read */
-
- if (fread(&ifdoff, 4, 1, fp) == NULL) { ern = -3; goto end; }
- if (fseek(fp, ifdoff, SEEK_SET) != 0) { ern = -4; goto end; }
- if (fread(&ifdn, 2, 1, fp) == NULL) { ern = -5; goto end; }
- for (i = 1; i <= ifdn; i++) {
- if (fread(&ifd, 12, 1, fp) == NULL) { ern = -6; goto end; }
- if (ifd.tag == 0x0100) dx = ifd.data;
- if (ifd.tag == 0x0101) dy = ifd.data;
- if (ifd.tag == 0x0102) {
- pi = ifd.data;
- if (pi != 4) { ern = -7; goto end; } /* not color 16 */
- }
- if ((ifd.tag == 0x0103) && (ifd.data != 1)) { ern = -8; goto end; } /* not normal */
- if (ifd.tag == 0x0111) voff = ifd.data;
- }
-
- if (fseek(fp, voff, SEEK_SET) != 0) { ern = -9; goto end; }
- dy += y; dx += x;
- for (i = y; i < dy; i++) {
- for (j = x; j < dx;) {
- if (fread(&vramd, 2, 1, fp) == NULL) { ern = -10; goto end; }
- ret = GDS_pointColor(&GDS_data, vramd & 0x0f);
- ret = GDS_pointFirst(&GDS_data, j++, i);
- ret = GDS_pointColor(&GDS_data, (vramd >>= 4) & 0x0f);
- ret = GDS_pointFirst(&GDS_data, j++, i);
- ret = GDS_pointColor(&GDS_data, (vramd >>= 4) & 0x0f);
- ret = GDS_pointFirst(&GDS_data, j++, i);
- ret = GDS_pointColor(&GDS_data, (vramd >>= 4));
- ret = GDS_pointFirst(&GDS_data, j++, i);
- ret = GDS_outputGraph(&GDS_data, &n, &offset);
- ret = GDS_resetData(&GDS_data);
- }
- }
- ern = 0;
- end:;
- fclose(fp);
- return(ern);
- }
-